package person;

//外部类
public class Person {
    public int age;

    public Object getHeart(){
        //方法内部类(局部内部类)
        /*
        1.方法内定义的局部变量只能在方法里使用
        2.方法内不能定义静态成员
        3.方法内的成员不能有public/private/protected等访问修饰符去进行成员的访问修订
        4.定义在方法内部类,作用范围也在方法内
        5.类中可以包含final/abstract(不推荐)修饰的成员
         */
        class Heart{
            public int age=15;
            public String say(){
                return "hello";
            }
            public String beat(){
                //静态类不能直接调用非静态方法,可以通过实例化对象调用
                String str=new Person().active();
                return str+new Person().age+"岁的心脏在跳动";
            }
        }
        return new Heart().beat();
    }
    public String active(){
        return "咚咚~~";
    }
    //成员内部类
    /*
    1.内部类在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化
    2.内部类的访问修饰符,可以任意,但是访问权限会受到影响
    3.内部类可以直接访问外部类的成员,如果出现同名的属性优先使用内部类所定义的
    4.我们可以使用外部类.this.成员的方式,访问外部类中的同名的信息
    5.外部类访问内部类信息,需要通过实例化内部类,无法直接访问
    6.内部类编译后.class文件命名:外部类名$内部类名.class
     */
    /*
    public class Heart{
        int age=16;
        int temp=22;
        public String active(){
            return "咚咚2~~";
        }
        public String beat(){
            String str=Person.this.active();
            return str+Person.this.age+"岁的心脏在跳动";
        }
    }
     */
    //静态内部类
    /*
    1.静态内部类中只能直接访问外部类的静态成员,如果需要调用非静态成员可以通过实例化对象调用
    2.静态内部类对象实例化时,可以不依赖于外部类对象
    3.可以通过外部类.内部类.静态成员的方式,访问内部静态成员
    4.当内部类属性与外部类属性同名时默认直接调用内部类中的成员;
    如果需要访问外部类中的静态属性,则可以通过外部类.静态属性调用外部静态属性;
    如果需要访问外部类中的非静态属性,则可以通过new 外部类().静态属性调用外部静态属性
     */
    /*
    public static class Heart{
        public static int age=15;
        public static String say(){
            return "hello";
        }
        public String beat(){
            //静态类不能直接调用非静态方法,可以通过实例化对象调用
            String str=new Person().active();
            return str+new Person().age+"岁的心脏在跳动";
        }
    }
     */



}
